<?php

include_once ENTITIES."cliente.php";
include_once ENTITIES."telefone.php";

include_once MODELS."cliente.php";
include_once MODELS."telefone.php";

class ClienteController {
    
    private $modelCliente;
    private $modelTelefone;

    public function __construct() {
        $this->modelCliente = new ClienteModel();
        $this->modelTelefone = new TelefoneModel();
    }
    
    public function addCliente(Cliente $cliente = null){
        if(is_null($cliente)){
            $cliente = new Cliente();
            $this->linkCliente($cliente);
        }
        global $config;
        if(empty($cliente->nome) || empty($cliente->apelido) || empty($cliente->endereco) ||
           empty($cliente->numero) || empty($cliente->bairro) || empty($cliente->localidade) ) {
            $config->failInFunction("Os campos: Nome, Apelido, Endereço, Número, Bairro e Localidade são necessários para inserção");
            $config->redirect("index.php?op=cad-clie");
        }
        $hasId = $config->filter("for-update-id");
        $res = false;
        $resTel = true;
        if(empty($hasId)){
            $res = $this->modelCliente->insert($cliente);
            if($res) {
                foreach ($cliente->telefones as $telefone){
                    $telefone->dono = $res;
                }
                $resTel = empty($cliente->telefones) ? true : $this->modelTelefone->insert(TelefoneModel::TABLE_CLIE, $cliente->telefones);
            }
        } else {
            $cliente->id = $hasId;
            $res = $this->modelCliente->update($cliente);
            foreach ($cliente->telefones as $telefone){
                $telefone->dono = $cliente->id;
            }
            if(empty ($cliente->telefones)){
                $resTel = $this->modelTelefone->delete(TelefoneModel::TABLE_CLIE, $cliente->id);
            }  else
                $resTel = $this->modelTelefone->delete(TelefoneModel::TABLE_CLIE, $cliente->id) && 
                          $this->modelTelefone->insert(TelefoneModel::TABLE_CLIE, $cliente->telefones);
            
        }
        if($res){
            $message = ($resTel) ? null : "Porém telefones não foram inseridos";
            $config->successInFunction($message);
        } else {
            $config->failInFunction($this->modelCliente->handleError());
        }
        $config->redirect("index.php?op=cad-clie");
    }
    
    public function removeCliente(){
        global $config;
        $id_cliente = $config->filter("clie");
        if(isset($id_cliente)){
            $res = $this->modelCliente->delete($id_cliente); 
            if($res){
                $message = null;
                if(!$this->modelTelefone->delete(TelefoneModel::TABLE_CLIE, $id_cliente))
                    $message = "Porém telefones não foram apagados";
                $config->successInFunction($message);
            } else {
                $config->failInFunction($this->modelCliente->handleError());
            }    
        } else {
            $config->failInFunction("Cliente não informado");
        }
        $config->redirect("index.php?op=cad-clie");
    }
    
    private function linkCliente(Cliente &$cliente){
        global $config;
        $cliente->id = $config->filter("id");
        $cliente->nome = mb_strtoupper($config->filter("nome"), 'UTF-8');
        $cliente->nascimento = $config->filter("nascimento");
        $cliente->apelido = mb_strtoupper($config->filter("apelido"), 'UTF-8');
        $cliente->rg = $config->filter("rg");
        $cliente->orgaoEmissor = mb_strtoupper($config->filter("orgao-emissor"), 'UTF-8');
        $cpf = $config->filter("cpf");
        $cliente->cpf = str_replace(array(".","-"), "", $cpf);
        $cliente->conjugue = mb_strtoupper($config->filter("conjugue"), 'UTF-8');
        $cliente->nomePai = mb_strtoupper($config->filter("nome-pai"), 'UTF-8');
        $cliente->nomeMae = mb_strtoupper($config->filter("nome-mae"), 'UTF-8');
        $cliente->endereco = mb_strtoupper($config->filter("endereco"), 'UTF-8');
        $cliente->numero = $config->filter("numero");
        $cliente->bairro = mb_strtoupper($config->filter("bairro"), 'UTF-8');
        $cliente->referencia = mb_strtoupper($config->filter("referencia"), 'UTF-8');
        $cliente->casaPropria = (bool) $config->filter("casa-propria");
        $cliente->tempoCasaPropria = $config->filter("tempo-casa-propria");
        $cliente->observacao = mb_strtoupper($config->filter("observacao"), 'UTF-8');
        $cliente->rendaMensal = (double)$config->filter("renda");
        $cliente->localidade = (int) $config->filter("localidade");
        $cliente->telefones = array();
        $i = 1;
        $telefone = $config->filter("telefone-$i");
        while(!is_null($telefone)){
            if(!empty($telefone)){
                $tel = str_replace(array("(",")","-"," "), "", $telefone);
                $cliente->telefones[] = new Telefone($tel);
            }
            $i++;
            $telefone = $config->filter("telefone-$i");
        }
    }
    
    public function getAllClientes($foreign_values = false, $byLoja = false){
        $condition = null;
        //if($byLoja){
            //Ajustar a condição aqui
        //    ;
        //}
        if($foreign_values)
            return $this->modelCliente->superSelect($condition);
        return $this->modelCliente->select("*", $condition);
    }
    
	public function getClientesForListView(){
		return $this->modelCliente->selectOnlyList();			
	}

    public function getAllTelefonesOfCliente($cliente_id){
        $condition = TelefoneModel::CLIENTE." = $cliente_id";
        return $this->modelTelefone->select(TelefoneModel::TABLE_CLIE,$condition);
    }
    
    public function getCliente($id_cliente, $foreign_values = false){
        $condition = ClienteModel::ID." = $id_cliente";
        if($foreign_values)
            $cliente = $this->modelCliente->superSelect($condition);
        else
            $cliente = $this->modelCliente->select("*", $condition);
        if(!empty($cliente)) return $cliente[0];
        return  new Cliente();
    }
    
}
?>
